using System.Data;
using Eureka.objetos;
using System.Collections.Generic;

namespace Eureka.modelos
{
    public class Ranking
    {
        private List<KeyValuePair<string,int>> rankers; //lista de pares de login com pontos
        private int dificuldade;

        #region encapsulated fields (set/get methods)

        public int Dificuldade
        {
            get { return dificuldade; }
            set { dificuldade = value; }
        }

        #endregion

        public Ranking(int dif, int qtde)
        {
            rankers = new List<KeyValuePair<string,int>>();
            dificuldade = dif;

            DataSet ds = RankingDAO.buscar(dif, qtde);
            foreach (DataRow row in ds.Tables[0].Rows)
            {
                KeyValuePair<string, int> ranker = new KeyValuePair<string, int>(row["login"].ToString(), (int)row["pontos"]);
                rankers.Add(ranker);
            }
        }

        public int ingressarRank(int jogadorID, int pontos)
        {
            if(pontos == 0)
                return -1;
            if (rankers.Count == 0)
            {
                inserir(jogadorID, pontos);
                return 1;
            }
            else
            {
                foreach (KeyValuePair<string, int> ranker in rankers)
                {
                    if (ranker.Value < pontos)
                    {
                        inserir(jogadorID, pontos);
                        return rankers.IndexOf(ranker) + 1;
                    }
                }
            }
            return -1;
        }

        public void inserir(int jogadorID, int pontuacao)
        {
            if(rankers.Count==50)
            {
                Jogador ultimoRank = Jogador.buscar(rankers[49].Key);
                RankingDAO.remover(ultimoRank.Id, this.dificuldade, rankers[49].Value);
            }
            RankingDAO.inserir(jogadorID, this.dificuldade, pontuacao);
        }

        #region static methods

        static public DataSet buscarDataSet(int dificuldade, int qtde)
        {
            return RankingDAO.buscar(dificuldade, qtde);
        }

        static public void zerar(int dificuldade)
        {
            RankingDAO.zerar(dificuldade);
        }

        #endregion
    }
}
